#include <iostream>
#include <mysql/mysql.h>
#include <string>

const std::string host  = "127.0.0.1";
const std::string user = "mihayou";
const std::string passwd = "123456";
const std::string db = "conn";
const unsigned int port = 3306;

int main()
{
  //std::cout << "mysql client version: " << mysql_get_client_info() << std::endl;
  
  //初始化
	MYSQL* my = mysql_init(nullptr);
	if(my == nullptr)
	{
    std::cerr << "init Mysql error" << std::endl;
    return 1;
	}
  
  //连接数据库
  if(mysql_real_connect(my, host.c_str(), user.c_str(), passwd.c_str(), db.c_str(), port, nullptr, 0) == nullptr)
  {
    std::cout << "connect Mysql eror" << std::endl;
    return 2;
  }

  //std::cout << "connect mysql success" << std::endl;
  
  //设置编码
  mysql_set_character_set(my, "utf8");

  //std::string sql = "insert into t1(name,age,tel) values('空', 55, '78')";
  //std::string sql = "update t1 set name='gg' where id=2";
  //std::string sql = "delete from t1 where id=3";
  std::string sql = "select * from t1";
  //std::string sql = "select name,age from t1 where id=5";
  
  //处理语句
  int n = mysql_query(my, sql.c_str());
  if(n == 0)
    std::cout << sql << " success" << std::endl;
  else
  {
    std::cerr << sql << " fail" << std::endl;
    return 3;
  }
  
  //结果集
  MYSQL_RES* res = mysql_store_result(my);
  if(res == nullptr)
  {
    std::cerr << "mysql_store_result error" << std::endl;
    return 4;
  }

  int rows = mysql_num_rows(res);
  int fields = mysql_num_fields(res);

  std::cout << "行: " << rows << std::endl;
  std::cout << "列: " << fields << std::endl;
  
  //属性
  MYSQL_FIELD* fields_array = mysql_fetch_fields(res);
  for(int i = 0;i < fields;i++)
  {
    std::cout << fields_array[i].name << "\t";
  }
  std::cout << "\n";
  
  //内容
  for(int i = 0;i < rows;i++)
  {
    MYSQL_ROW row = mysql_fetch_row(res);
    for(int j = 0;j < fields;j++)
    {
      std::cout << row[j] << "\t";
    }
    std::cout << "\n";
  }
  
  //std::cout << fields_array[0].db << " " << fields_array[0].table << std::endl;

  //while(true)
  //{
  //  std::cout << "Mysql> ";
  //  if(!(std::getline(std::cin, sql)) || sql == "quit")
  //  {
  //    std::cout << "bye bye" << std::endl;
  //    break;
  //  }
  //  int n = mysql_query(my, sql.c_str());
  //  if(n == 0)
  //    std::cout << sql << " success " << n << std::endl; 
  //  else
  //    std::cerr << sql << " fail " << n << std::endl;
  //}
  
  //释放结果集
  mysql_free_result(res);

  //关闭mysql连接
  mysql_close(my);

	return 0;
}
